package com.tgpay.iot.dto;

import lombok.Data;

import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Min;
import jakarta.validation.constraints.Max;

/**
 * 充电相关DTO
 */
public class ChargingDto {
    
    /**
     * 启动充电请求
     */
    @Data
    public static class StartChargingRequest {
        
        /**
         * 设备IMEI
         */
        @NotNull(message = "设备IMEI不能为空")
        private String imei;
        
        /**
         * 端口号
         */
        @NotNull(message = "端口号不能为空")
        @Min(value = 1, message = "端口号必须大于0")
        private Integer portId;
        
        /**
         * 充电类型：1-充满自停，2-按金额，3-按时间
         */
        @NotNull(message = "充电类型不能为空")
        @Min(value = 1, message = "充电类型无效")
        @Max(value = 3, message = "充电类型无效")
        private Integer chargeType;
        
        /**
         * 充电参数（金额分或时间分钟）
         */
        private Integer chargeParam;
        
        /**
         * 启动方式：1-扫码启动
         */
        private Integer startMethod = 1;
        
        /**
         * 卡号
         */
        private Long cardNumber;
        
        /**
         * 可用金额（分）
         */
        private Integer availableAmount;
    }
    
    /**
     * 启动充电响应
     */
    @Data
    public static class StartChargingResponse {
        
        /**
         * 订单号
         */
        private String orderNo;
        
        /**
         * 充电状态：1-充电中
         */
        private Integer status;
        
        /**
         * 消息
         */
        private String message;
        
        /**
         * 开始时间
         */
        private java.time.LocalDateTime startTime;
    }
    
    /**
     * 停止充电请求
     */
    @Data
    public static class StopChargingRequest {
        
        /**
         * 订单号
         */
        @NotNull(message = "订单号不能为空")
        private String orderNo;
    }
    
    /**
     * 充电状态响应
     */
    @Data
    public static class ChargingStatusResponse {
        
        /**
         * 订单号
         */
        private String orderNo;
        
        /**
         * 充电状态：0-创建，1-充电中，2-已完成，3-已取消
         */
        private Integer status;
        
        /**
         * 已充电时间（秒）
         */
        private Long chargingTime;
        
        /**
         * 实际充电金额（分）
         */
        private Integer actualAmount;
        
        /**
         * 剩余时间（秒，按时间充电时）
         */
        private Long remainingTime;
        
        /**
         * 剩余金额（分，按金额充电时）
         */
        private Integer remainingAmount;
    }
}